package com.yunhe.merchants.repository;

import com.yunhe.merchants.domain.MyProject;
import com.yunhe.merchants.model.ChannelSourceData;
import com.yunhe.merchants.model.FilterCondition;
import com.yunhe.merchants.model.HousingMerchantsInfo;
import com.yunhe.merchants.model.PersonalPlanComplete;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @Author: DongWenYu
 * @Date: 2021/5/13 9:18
 */
@Repository
public interface MyProjectRepository {

    /**
     * 新增项目
     * @param myProject 
     * @return void 
     * @create 2021/5/13 9:46
     */
    void insert(MyProject myProject);
    
    /**
     * 根据id删除项目
     * @param id 
     * @return void 
     * @create 2021/5/13 9:46
     */
    void delete(Long id);
    
    /**
     * 根据id更新项目
     * @param myProject 
     * @return void 
     * @create 2021/5/13 9:47
     */
    void update(MyProject myProject);

    /**
     * 条件查询项目
     * @param filterCondition
     * @param status
     * @return java.util.List<com.yunhe.merchants.domain.MyProject>
     * @create 2021/5/13 10:35
     */
    List<MyProject> selectByCondition(@Param("condition") FilterCondition filterCondition,@Param("status") List<String> status);

    /**
     * 根据企业名称和客户电话查询项目集合
     * @param companyName
     * @param custTel
     * @return java.util.List<com.yunhe.merchants.domain.MyProject>
     * @create 2021/5/13 10:35
     */
    List<MyProject> selectByCNameAndCustTel(@Param("cName") String companyName, @Param("cTel") String custTel);

    /**
     * 批量插入
     * @param myProjects 
     * @return void 
     * @create 2021/5/13 10:53
     */
    void insertBatch(List<MyProject> myProjects);

    /**
     * 根据id批量查询
     * @param ids
     * @return java.util.List<com.yunhe.merchants.domain.MyProject> 
     * @create 2021/5/13 10:56
     */
    List<MyProject> selectByIdBatch(@Param("ids") List<String> ids);

    /**
     * 根据id查询
     * @param id 
     * @return com.yunhe.merchants.domain.MyProject 
     * @create 2021/5/13 11:29
     */
    MyProject selectById(Long id);

    /**
     * 根据推荐厂房查询
     * @param recommendOffice 
     * @return java.util.List<com.yunhe.merchants.domain.MyProject> 
     * @create 2021/5/13 11:29
     */
    List<MyProject> selectByOffice(Long recommendOffice);

    /**
     * 查询2周没更新的项目
     * @return java.util.List<com.yunhe.merchants.domain.MyProject> 
     * @create 2021/5/13 14:29
     */
    List<MyProject> selectNoUpdate();

    /**
     * 查询即将离场的项目
     * @return java.util.List<com.yunhe.merchants.domain.MyProject> 
     * @create 2021/5/13 14:29
     */
    List<MyProject> selectLeaveInMonth();

    /**
     * 查询需要保护期提醒的集合
     * @return java.util.List<com.yunhe.merchants.domain.MyProject> 
     * @create 2021/5/13 14:28
     */
    List<MyProject> selectProtectedRemind();

    /**
     * 查询保护期到期的项目集合
     * @return java.util.List<com.yunhe.merchants.domain.MyProject>
     * @create 2021/5/13 14:33
     */
    List<MyProject> selectProtectedExpire();

    /**
     * 已经离场但状态为即将离场的项目
     * @return java.util.List<com.yunhe.merchants.domain.MyProject>
     * @create 2021/5/13 15:42
     */
    List<MyProject> selectLeave();

    /**
     * 条件查询导入项目
     * @param filterCondition
     * @param userId
     * @return java.util.List<com.yunhe.merchants.domain.MyProject>
     * @create 2021/5/13 17:37
     */
    List<MyProject> selectImportByCondition(@Param("condition") FilterCondition filterCondition,@Param("userId") Long userId);

    /**
     * @Description 根据组织id、业务员id、状态以及时间查询成功项目的厂房
     * @Param String companyStatus,Long deptId,Long salesmanId,String startTime,String endTime
     * @Return List<Long>
     * @Date 2021/5/14 14:38
     */
    List<Long> getSuccessProjectByOrgIdSalesmanIdAndTime(@Param("companyStatus") String companyStatus,
                                                    @Param("orgIds")List<Long> deptIds,
                                                    @Param("salesmanId") Long salesmanId,
                                                    @Param("startTime")String startTime,
                                                    @Param("endTime") String endTime);

    /**
     * @Description 根据部门id、状态、时间查询（分析统计）
     * @Param List<Long>orgIds, List<String> companyStatusList, String startTime, String endTime
     * @Return Map<String,Integer>
     * @Date 2021/5/17 13:59
     */
    List<Map<String,Integer>> getCountByOrgIdAndTime(@Param("orgIds")List<Long> orgIds,
                                               @Param("companyStatusList") List<String> companyStatusList,
                                               @Param("startTime")String startTime,
                                               @Param("endTime") String endTime);

    /**
     * @Description 根据部门查询渠道来源并分类（分析统计）
     * @Param List<Long> orgIds
     * @Return Map<String, Integer>
     * @Date 2021/5/17 14:30
     */
    List<ChannelSourceData> getChannelSourse(@Param("orgIds")List<Long> orgIds);

    Integer getPhoneCountByOrgIdAndTime(@Param("orgIds") List<Long> orgIds,
                                              @Param("companyStatusList") List<String> companyStatusList,
                                              @Param("companyStatus") String companyStatus);

    /**
     * 查询列表
     * @param filterCondition
     * @return
     */
    List<MyProject> selectForLatestStatusList(FilterCondition filterCondition);

    /**
     * @Description 房源管理查看招商信息
     * @Param Long id
     * @Return HousingMerchantsInfo
     * @Date 2021/6/25 11:59
     */
    HousingMerchantsInfo getMerchantsInfo(@Param("id") Long id);
}
